草庐IT

SVN 生命周期

全部标签

c++ - lambda 的生命周期在 const lambda 中捕获引用

我有以下API:old_operation(stream,format,varArgs);我想写一个适配器来编写调用如下:stream为此,我使用了一个临时对象,它存储对varArgs的引用并重载operator申请old_operation()如下:templatedecltype(auto)storage(T&&...t){return[&](auto&&f)->decltype(auto){returnstd::forward(f)(t...);};}templateclassOperation{usingStorage=decltype(storage(std::declval

C++ 函数属性指示返回值的生命周期与参数相同

这段代码有未定义的行为:#includestd::stringmake_str(constchar*s){returns;}constchar*get_str(conststd::string&s){returns.c_str();}constchar*bad(){returnget_str(make_str("hello"));}错误的函数创建了一个临时的std::string并返回一个指向其数据的指针,该函数一返回就无效。GCC5+捕获此(“函数返回局部变量的地址”)但仅当使用-O3编译时。在包括-O2在内的更典型的优化级别,GCC可以毫无怨言地编译它,即使使用-Wall-Wext

c++ - 组织解决方案,项目和SVN

在目录结构方面,我希望在SVN中建立项目时有所帮助。我已经在SO上阅读了有关此问题的几个答案,但是由于我是新来的,所以大多数答案很难理解。我正在构建一个库,其他几个不同的项目都依赖于该库:我需要能够轻松导出MyLibrary(仅header和.lib)以供第三方使用的功能MyLibrary1取决于外部库,应该能够管理这些库的不同版本!MyLibrary2取决于外部库fmod,glew,...项目1,2,4,5,6...取决于MyLibrary1、2或同时取决于每个项目可能需要多个平台(osx,windows等)的版本。我想知道一种组织这种情况的好方法,请记住,我对此还比较陌生-更加Ne

c++ - C++ 临时对象的生命周期是在什么时候创建的? : expression extended by binding it to a local const reference?

我不清楚是否可以通过将临时对象绑定(bind)到?:表达式中的常量引用来延长临时对象的生命周期:classFoo{...};Foo*someLValue=...;constFoo&=someLValue?*someLValue:Foo();通过调用默认构造函数Foo()创建的临时对象的生命周期是否通过将其绑定(bind)到本地constref来延长,即使绑定(bind)是有条件的?还是因为Foo()的临时值会在?:表达式的末尾被销毁,所以这会创建一个悬空引用? 最佳答案 在此代码中,条件运算符的第二个和第三个操作数具有不同的值类别(

c++ - 为什么在 const 引用生命周期是当前范围的长度时使用 const 非引用

因此在C++中,如果将函数的返回值分配给const引用,则该返回值的生命周期将是该引用的范围。例如MyClassGetMyClass(){returnMyClass("someconstructor");}voidOtherFunction(){constMyClass&myClass=GetMyClass();//lifetimeofreturnvalueisuntiltheend//ofscopeduetomagicconstreferencedoStuff(myClass);doMoreStuff(myClass);}//myClassisdestructed因此,无论您通常将函

c++ - std::function 到对象的成员函数和对象的生命周期

如果我有一个std::function的实例,它绑定(bind)到一个对象实例的成员函数,并且该对象实例超出范围,否则将被销毁,我的std::function对象现在被认为是一个坏指针,调用时会失败?例子:intmain(intargc,constchar*argv){type*instance=newtype();std::functionfunc=std::bind(type::func,instance);deleteinstance;func(0);//isthisaninvalidcall}标准中是否有规定应该发生什么?我的直觉是它会抛出异常,因为对象不再存在编辑:该标准是否

c++ - 具有分层访问控制的存储库的 SVN 或 Git

对于开发人员只需要访问存储库特定部分的商业项目,您推荐哪一个?开发IDE是Eclipse编程语言为C/C++需求的主要特征是:对存储库的权威和ACL分层访问 最佳答案 Git,结合使用Gitolite管理的“中央”服务器,可以提供您需要的所有细粒度控制(每个用户/每个组,可以访问全部或部分repo,甚至只能访问某些分支)。也就是说,如果您的开发人员更熟悉像SVN这样的CVCS,那么至少在启动项目时使用这些知识可能更明智(并在您的apache服务器配置中使用身份验证方法):CVCScanbequitedifferentfromaDVC

c++ - 绑定(bind)到引用时临时对象生命周期扩展异常的基本原理是什么?

在C++11标准的12.2中:Thetemporarytowhichthereferenceisboundorthetemporarythatisthecompleteobjectofasubobjecttowhichthereferenceisboundpersistsforthelifetimeofthereferenceexcept:Atemporaryboundtoareferencememberinaconstructor’sctor-initializer(12.6.2)persistsuntiltheconstructorexits.Atemporaryboundtoar

c++ - 由 placement-new 创建的普通类型的生命周期从什么时候开始?

在深入研究动态内存的过程中,我发现微不足道的类型如何开始其生命周期似乎是矛盾的。考虑片段void*p=::operatornew(sizeof(int));//1//2new(p)int;//3int什么时候开始它的生命周期?只获取存储,指定::operatornew有效果(来自[new.delete.single])Theallocationfunctionscalledbyanew-expressiontoallocatesizebytesofstorage.[...]allocatesstoragesuitablyalignedtorepresentanyobjectofthat

C++ - 临时变量及其生命周期

这个问题可以被认为是以下问题的后续问题:C++temporaryvariablelifetime.Qt容器支持stream-like初始化语法。现在,当我编写以下代码时,我的QVector在赋值后立即销毁,引用变为悬空。constQVector&v=QVector()对应operator实现方式如下:inlineQVector&operator据我所知,10.4.10TemporaryObjects声明临时对象的生命周期被延长以匹配相应的生命周期const引用它。但是,在这种情况下,临时对象QVector()较早销毁。我想这可能是由于最后一个操作返回了QVector&而发生的。并且不应